package com.example.mapper;

import com.example.entity.SalesRecord;
import com.example.vo.SalesRecordVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品售卖记录Mapper
 */
@Mapper
public interface SalesRecordMapper {

    /**
     * 插入售卖记录
     */
    int insert(SalesRecord salesRecord);

    /**
     * 根据ID删除
     */
    int deleteById(Long id);

    /**
     * 根据ID更新
     */
    int updateById(SalesRecord salesRecord);

    /**
     * 根据ID查询
     */
    SalesRecord selectById(Long id);

    /**
     * 根据ID查询VO
     */
    SalesRecordVO selectVOById(Long id);

    /**
     * 条件查询列表
     */
    List<SalesRecord> selectList(@Param("salesRecord") SalesRecord salesRecord);

    /**
     * 条件查询VO列表
     */
    List<SalesRecordVO> selectVOList(@Param("salesRecord") SalesRecord salesRecord);

    /**
     * 根据店长ID查询售卖记录
     */
    List<SalesRecordVO> selectByStoreManagerId(@Param("storeManagerId") Long storeManagerId);

    /**
     * 分页查询店长售卖记录
     */
    List<SalesRecordVO> selectStoreManagerSalesPage(@Param("storeManagerId") Long storeManagerId,
                                                    @Param("recordNo") String recordNo,
                                                    @Param("productName") String productName,
                                                    @Param("productCode") String productCode,
                                                    @Param("customerName") String customerName,
                                                    @Param("customerPhone") String customerPhone,
                                                    @Param("saleStatus") Integer saleStatus,
                                                    @Param("startTime") String startTime,
                                                    @Param("endTime") String endTime);

    /**
     * 分页查询所有售卖记录（管理员使用）
     */
    List<SalesRecordVO> selectAllSalesPage(@Param("recordNo") String recordNo,
                                          @Param("productName") String productName,
                                          @Param("productCode") String productCode,
                                          @Param("customerName") String customerName,
                                          @Param("customerPhone") String customerPhone,
                                          @Param("saleStatus") Integer saleStatus,
                                          @Param("startTime") String startTime,
                                          @Param("endTime") String endTime);

    /**
     * 统计店长售卖记录总数
     */
    long countStoreManagerSales(@Param("storeManagerId") Long storeManagerId,
                               @Param("recordNo") String recordNo,
                               @Param("productName") String productName,
                               @Param("productCode") String productCode,
                               @Param("customerName") String customerName,
                               @Param("customerPhone") String customerPhone,
                               @Param("saleStatus") Integer saleStatus,
                               @Param("startTime") String startTime,
                               @Param("endTime") String endTime);

    /**
     * 统计所有售卖记录总数
     */
    long countAllSales(@Param("recordNo") String recordNo,
                      @Param("productName") String productName,
                      @Param("productCode") String productCode,
                      @Param("customerName") String customerName,
                      @Param("customerPhone") String customerPhone,
                      @Param("saleStatus") Integer saleStatus,
                      @Param("startTime") String startTime,
                      @Param("endTime") String endTime);

    /**
     * 根据商品ID查询售卖记录
     */
    List<SalesRecordVO> selectByProductId(@Param("productId") Long productId);
} 